<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>State状态</title>
</head>
<body>
<!--准备好的容器-->
<div id="test">

</div>
</body>
<!--引入babel，用于将jsx转为js-->
<script src="../js/babel.min.js"></script>
<!--核心库引入顺序，必须先是核心库然后在引入dom库-->
<script src="../js/react.development.js"></script>
<!--用于支持react操作dom-->
<script src="../js/react-dom.development.js"></script>

<!--此处的type必须是Babel不能是JavaScript-->
<script type="text/babel">
    //1.创建组件
    class Weather extends React.Component {
        //构造器调用几次? - 1次
        constructor(props) {
            console.log('constructor')
            super(props);
            //1.初始化状态
            this.state = {isHot: false, wind: '微风'}
            //2.解决changeWeather中的this指向问题
            this.changeWeather = this.changeWeather.bind(this)
        }

        //构造器调用几次? - 1+n次，1是初始化的那次，n是改变状态的次数
        render() {
            //读取状态
            console.log(this)
            const {isHot, wind} = this.state
            return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '寒冷'},{wind}</h1>
        }

        //changeWeather 放在哪里？- Weather原型对象上
        //通过Weather实例调用changeWeather方法时，changeWeather中的this就是Weather实例
        //由于changeWeather是作为onClick的回调，所以不是通过实例调用的，是直接调用
        //类中的方法，默认开启了局部的严格模式，所以changWeather中的this为undefined
        //changeWeather调用几次？- 点几次调用几次
        changeWeather() {
            console.log('此处修改isHot')
            console.log(this)
            //严重注意：状态(state)不可直接更改，(下面这行就是直接修改)要借助一个内置的API去更改
            //this.state.isHot = !hot //错误的写法
            //状态必须要用setState()去更改,且更新是合并内容，不是直接替换
            this.setState({isHot: !this.state.isHot})
            console.log(this.state.isHot)
        }
    }

    //2.渲染组件到页面
    ReactDOM.render(<Weather/>, document.getElementById('test'))

    // const title = document.getElementById('title')
    // title.addEventListener("click", () => {
    //     console.log('标题被点击了')
    // })

    // title.onclick = () => {
    //     console.log('标题被点击了')
    // }

</script>
</html>